package com.xique.park.mapper.biz;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.xique.park.bean.request.app.ParkInAndOutListRequest;
import com.xique.park.bean.request.web.parkInAndOut.WebParkInAndOutListRequest;
import com.xique.park.bean.vo.app.ParkInAndOutVo;
import com.xique.park.bean.vo.web.parkInAndOut.ParkInAndOutWebVo;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * APP进出记录mapper
 *
 * @author xique
 */
public interface ParkInAndOutMapper extends BaseMapper<ParkInAndOutVo> {

    /**
     * 进场和出场记录多表查询（APP进场和出场记录分开查询，结果合并即可）
     *
     * @param page    分页参数
     * @param request 移动端进出记录request
     * @return 进场和出场记录
     */
    IPage<ParkInAndOutVo> findByPage(@Param("page") Page<ParkInAndOutVo> page,
                                     @Param("request") ParkInAndOutListRequest request);

    /**
     * 进场和出场记录总数
     *
     * @param search 移动端进出记录request
     * @return 进场和出场记录总数
     */
    Long selectCount(ParkInAndOutListRequest search);

    /* ------------------------------- web端方法 ------------------------------- */

    /**
     * 进出记录查询（web端进出场要合并成一条）
     *
     * @param page   分页条件
     * @param search 查询条件
     * @return 查询结果
     */
    IPage<ParkInAndOutWebVo> webFindByPage(@Param("page") Page<ParkInAndOutWebVo> page,
                                           @Param("search") WebParkInAndOutListRequest search);

    /**
     * 进场和出场记录总数
     *
     * @param search web进出记录request
     * @return 进场和出场记录总数
     */
    Long webSelectCount(WebParkInAndOutListRequest search);

    /**
     * 根据ID批量查询
     *
     * @param parkInIds id列表
     * @param search    查询条件
     * @return 查询结果
     */
    List<ParkInAndOutWebVo> batchSelectIds(@Param("parkInIds") List<Long> parkInIds,
                                           @Param("search") WebParkInAndOutListRequest search);
}
